╬πδαΓδσφΦσ

╨Φ±εΓαφΦσ Γ εΩφσ
╩εφ≥σΩ±≥ ε≥εß≡αµσφΦ 
╙±≥αφεΓΩα α≥≡Φß≤≥εΓ
╬∩≡σΣσδσφΦσ α≥≡Φß≤≥εΓ
╨Φ±εΓαφΦσ ⌠Φπ≤≡
└∩δσ≥ Draw
╚±⌡εΣφ√σ ≥σΩ±≥√
╧≡εσΩ≥ α∩δσ≥α

    ╚±⌡εΣφ√σ ≥σΩ±≥√ α∩δσ≥α Draw

    ╚±⌡εΣφ√σ ≥σΩ±≥√ α∩δσ≥α Draw Γ√ φαΘΣσ≥σ Γ δΦ±≥Φφπσ 1.

    ╦Φ±≥Φφπ 1. ╘αΘδ draw.java

    import java.applet.*;
    import java.awt.*;
    
    public class draw extends Applet
    {
      Toolkit tk;
      String szFontList[];
      FontMetrics fm;
      int yStart = 20;
      int yStep;
      String parm_TestString;
      
      public void init()
      {
        tk = Toolkit.getDefaultToolkit();
        szFontList = tk.getFontList();  
        parm_TestString = 
          getParameter("TestString");
      }
    
      public String getAppletInfo()
      {
        return "Name: draw";
      }
    
      public void paint(Graphics g)
      {
        int yDraw;
        Dimension dimAppWndDimension = getSize();
        
        g.clearRect(0, 0, 
          dimAppWndDimension.width  - 1, 
          dimAppWndDimension.height - 1);
        
        g.setColor(Color.yellow);
        g.fillRect(0, 0, 
          dimAppWndDimension.width  - 1, 
          dimAppWndDimension.height - 1);
    
        g.setColor(Color.black);
        g.drawRect(0, 0, 
          dimAppWndDimension.width  - 1, 
          dimAppWndDimension.height - 1);
    
        fm = g.getFontMetrics();
        yStep = fm.getHeight();
        
        for(int i = 0; i < szFontList.length; i++)
        {
          g.setFont(new Font("Helvetica", 
            Font.PLAIN, 12));
          g.drawString(szFontList[i], 10, 
            yStart + yStep * i);
          
          fm = g.getFontMetrics();
          yStep = fm.getHeight();
          
          g.setFont(new Font(szFontList[i], 
            Font.PLAIN, 12));
          g.drawString(parm_TestString, 
            100, yStart + yStep * i);
        }
    
        yDraw = yStart + yStep * szFontList.length
          + yStep;
    
        Polygon p = new Polygon();
      
        p.addPoint(70, yDraw);
        p.addPoint(150, yDraw + 30);
        p.addPoint(160, yDraw + 80);
        p.addPoint(190, yDraw + 60);
        p.addPoint(140, yDraw + 30);
        p.addPoint(70, yDraw + 39);
    
        g.drawPolygon(p);
    
        g.setColor(Color.red);
        g.drawRect(10, yDraw + 85, 200, 100);
    
        g.setColor(Color.black);
        g.drawArc(10, yDraw + 85, 
          200, 100, -50, 320);
      }
      
      public String[][] getParameterInfo()
      {
        String[][] info =
        {
          {
    	"TestString", "String", "Test string" 
          }
        };
        return info;
      }
    }

    ╠σ≥εΣ init

    ╧≡Φ ΦφΦ÷ΦαδΦτα÷ΦΦ α∩δσ≥α ∞σ≥εΣ init ΦτΓδσΩασ≥ ±∩Φ±εΩ Σε±≥≤∩φ√⌡ °≡Φ⌠≥εΓ Φ ∩≡ΦφΦ∞ασ≥ τφα≈σφΦσ ∩α≡α∞σ≥≡α TestString, ∩σ≡σΣαΓασ∞εσ α∩δσ≥≤ Γ ΣεΩ≤∞σφ≥σ HTML.

    ╚τΓδσ≈σφΦσ ±∩Φ±Ωα °≡Φ⌠≥εΓ

    ╧≡ε÷σΣ≤≡α ΦτΓδσ≈σφΦ  ±∩Φ±Ωα Σε±≥≤∩φ√⌡ °≡Φ⌠≥εΓ Σε±≥α≥ε≈φε ∩≡ε±≥α Φ Γ√∩εδφ σ≥±  ±δσΣ≤■∙Φ∞ εß≡ατε∞:

    Toolkit tk;
    String szFontList[];
      . . .
    tk = Toolkit.getDefaultToolkit();
    szFontList = tk.getFontList();  

    └∩δσ≥ Γ√τ√Γασ≥ ±≥α≥Φ≈σ±ΩΦΘ ∞σ≥εΣ getDefaultToolkit Φτ Ωδα±±α Toolkit Φ τα≥σ∞, ∩εδⁿτ≤ ±ⁿ ∩εδ≤≈σφφεΘ ±±√δΩεΘ, ΦτΓδσΩασ≥ ±∩Φ±εΩ °≡Φ⌠≥εΓ, τα∩Φ±√Γα  σπε Γ ∞α±±ΦΓ szFontList.

    ─δ  ≈σπε σ∙σ ∞εµφε Φ±∩εδⁿτεΓα≥ⁿ Ωδα±± Toolkit?

    ╩δα±± Toolkit  Γδ σ≥±  αß±≥≡αΩ≥φ√∞ ±≤∩σ≡Ωδα±±ε∞ Σδ  Γ±σ⌡ ≡σαδΦτα÷ΦΘ AWT. ╧ε≡εµΣσφφ√σ ε≥ φσπε Ωδα±±√ Φ±∩εδⁿτ≤■≥±  Σδ  ∩≡ΦΓ τΩΦ ≡ατδΦ≈φ√⌡ Ωε∞∩εφσφ≥ ΩεφΩ≡σ≥φ√⌡ ≡σαδΦτα÷ΦΘ.

    ╤ετΣαΓα  ±ΓεΦ α∩δσ≥√, Γ√ ß≤Σσ≥σ ≡σΣΩε ∩≡Φßσπα≥ⁿ Ω ≤±δ≤πα∞ ²≥επε Ωδα±±α. ╬ΣφαΩε Γ φσ∞ σ±≥ⁿ φσ±ΩεδⁿΩε ∩εδστφ√⌡ ∞σ≥εΣεΓ, ∩≡ε≥ε≥Φ∩√ Ωε≥ε≡√⌡ ∞√ ∩σ≡σ≈Φ±δΦ∞ φΦµσ:

    • getDefaultToolkit

    ╧εδ≤≈σφΦσ ±±√δΩΦ φα Toolkit

    public static Toolkit getDefaultToolkit();	
    • getColorModel

    ╬∩≡σΣσδσφΦσ ≥σΩ≤∙σΘ ÷Γσ≥εΓεΘ ∞εΣσδΦ, Γ√ß≡αφφεΘ Γ Ωεφ≥σΩ±≥ ε≥εß≡αµσφΦ 

    public abstract ColorModel getColorModel();	
    • getFontList

    ╧εδ≤≈σφΦσ ±∩Φ±Ωα °≡Φ⌠≥εΓ, Σε±≥≤∩φ√⌡ α∩δσ≥≤

    public abstract String[] getFontList();
    • getFontMetrics

    ╧εδ≤≈σφΦσ ∞σ≥≡ΦΩ ταΣαφφεπε °≡Φ⌠≥α

    public abstract FontMetrics 
      getFontMetrics(Font font);
    • getImage

    ╧εδ≤≈σφΦσ ≡α±≥≡εΓεπε Φτεß≡αµσφΦ  ∩ε Φ∞σφΦ ⌠αΘδα

    public abstract Image 
      getImage(String filename);
    • getImage

    ╧εδ≤≈σφΦσ ≡α±≥≡εΓεπε Φτεß≡αµσφΦ  ∩ε αΣ≡σ±≤ URL

    public abstract Image getImage(URL  url);	
    • getScreenResolution

    ╬∩≡σΣσδσφΦσ ≡ατ≡σ°σφΦ  ²Ω≡αφα Γ ≥ε≈Ωα⌡ φα Σ■Θ∞

    public abstract int getScreenResolution();
    • getScreenSize

    ╨ατ∞σ≡√ ²Ω≡αφα Γ ∩ΦΩ±σδα⌡

    public abstract Dimension getScreenSize();
    • prepareImage

    ╧εΣπε≥εΓΩα ≡α±≥≡εΓεπε Φτεß≡αµσφΦ  Σδ  Γ√ΓεΣα

    public abstract boolean prepareImage(
      Image image,
      int width, int height,
      ImageObserver observer);
    • sync

    ╤Φφ⌡≡εφΦτα÷Φ  ±ε±≥ε φΦ  Toolkit

    public abstract void sync();

    ═αΦßεδσσ Φφ≥σ≡σ±φ√, ± φα°σΘ ≥ε≈ΩΦ τ≡σφΦ , ∞σ≥εΣ√ getFontList, getScreenResolution Φ getScreenSize, ± ∩ε∞ε∙ⁿ■ Ωε≥ε≡√⌡ α∩δσ≥ ∞εµσ≥, ±εε≥Γσ≥±≥Γσφφε, ∩εδ≤≈Φ≥ⁿ ±∩Φ±εΩ °≡Φ⌠≥εΓ, ε∩≡σΣσδΦ≥ⁿ ≡ατ≡σ°σφΦσ Φ ≡ατ∞σ≡ ²Ω≡αφα. ╧ε±δσΣφΦσ ΣΓα ∩α≡α∞σ≥≡α ∩ετΓεδ ■≥ ±⌠ε≡∞Φ≡εΓα≥ⁿ ±εΣσ≡µΦ∞εσ εΩφα α∩δσ≥α ε∩≥Φ∞αδⁿφ√∞ εß≡ατε∞ Φ±⌡εΣ  Φτ εß·σ∞α Φφ⌠ε≡∞α÷ΦΦ, Ωε≥ε≡√Θ ∞εµσ≥ Γ φσ∞ ≡ατ∞σ±≥Φ≥ⁿ± .

    ╧εδ≤≈σφΦσ τφα≈σφΦ  ∩α≡α∞σ≥≡εΓ

    ─ε ±Φ⌡ ∩ε≡ φα°Φ α∩δσ≥√ φσ ∩εδ≤≈αδΦ ∩α≡α∞σ≥≡εΓ Φτ ΣεΩ≤∞σφ≥εΓ HTML, Γ Ωε≥ε≡√σ ∞√ Φ⌡ Γ±≥≡αΦΓαδΦ.

    ╩εφσ≈φε, Γ±σ Ωεφ±≥αφ≥√, ≥σΩ±≥εΓ√σ ±≥≡εΩΦ, αΣ≡σ±α URL Φ Σ≡≤π≤■ Φφ⌠ε≡∞α÷Φ■ ∞εµφε ταΩεΣΦ≡εΓα≥ⁿ φσ∩ε±≡σΣ±≥Γσφφε Γ Φ±⌡εΣφε∞ ≥σΩ±≥σ α∩δσ≥α, εΣφαΩε, ε≈σΓΦΣφε, ²≥ε ε≈σφⁿ φσ≤Σεßφε.

    ╧εδⁿτ≤ ±ⁿ ε∩σ≡α≥ε≡α∞Φ <PARAM>, ≡α±∩εδεµσφφ√∞Φ Γ ΣεΩ≤∞σφ≥σ HTML ±≡ατ≤ ∩ε±δσ ε∩σ≡α≥ε≡α <APPLET>, ∞εµφε ∩σ≡σΣα≥ⁿ α∩δσ≥≤ ∩≡εΦτΓεδⁿφεσ ΩεδΦ≈σ±≥Γε ∩α≡α∞σ≥≡εΓ, φα∩≡Φ∞σ≡, Γ ΓΦΣσ ≥σΩ±≥εΓ√⌡ ±≥≡εΩ:

    <applet
        code=MyApplet.class
        id=MyApplet
         . . .
        width=320
        height=240 >
        <param name=ParamName1 value="Value 1">
        <param name=ParamName2 value="Value 2">
        <param name=ParamName3 value="Value 3">
        <param name=ParamName4 value="Value 4">
         . . .
    </applet>

    ╟Σσ±ⁿ ≈σ≡στ ∩α≡α∞σ≥≡ NAME ε∩σ≡α≥ε≡α <PARAM> ∩σ≡σΣασ≥±  Φ∞  ∩α≡α∞σ≥≡α α∩δσ≥α, α ≈σ≡στ ∩α≡α∞σ≥≡ VALUE - τφα≈σφΦσ ±εε≥Γσ≥±≥Γ≤■∙σπε ∩α≡α∞σ≥≡α.

    ╩αΩ ∩α≡α∞σ≥≡ ∞εµσ≥ ∩εδ≤≈Φ≥ⁿ τφα≈σφΦσ ∩α≡α∞σ≥≡εΓ?

    ─δ  ∩εδ≤≈σφΦ  τφα≈σφΦ  δ■ßεπε ∩α≡α∞σ≥≡α α∩δσ≥ Σεδµσφ Φ±∩εδⁿτεΓα≥ⁿ ∞σ≥εΣ getParameter. ┬ Ωα≈σ±≥Γσ σΣΦφ±≥Γσφφεπε ∩α≡α∞σ≥≡α ²≥ε∞≤ ∞σ≥εΣ≤ ∩σ≡σΣασ≥±  Φ∞  ∩α≡α∞σ≥≡α α∩δσ≥α Γ ΓΦΣσ ±≥≡εΩΦ ≥Φ∩α String, φα∩≡Φ∞σ≡:

    parm_TestString = getParameter("TestString");

    ╬ß√≈φε Γ α∩δσ≥σ ≥αΩµσ ε∩≡σΣσδ σ≥±  ∞σ≥εΣ getParameterInfo, ΓετΓ≡α∙α■∙ΦΘ Φφ⌠ε≡∞α÷Φ■ ε ∩α≡α∞σ≥≡α⌡. ┬ε≥ Φ±⌡εΣφ√Θ ≥σΩ±≥ ²≥επε ∞σ≥εΣα Σδ  φα°σπε α∩δσ≥α Draw:

    public String[][] getParameterInfo()
    {
      String[][] info =
      {
        {
          "TestString", "String", "Test string" 
        }
      };
      return info;
    }

    ╠σ≥εΣ getParameterInfo ΓετΓ≡α∙ασ≥ ∞α±±ΦΓ ∞α±±ΦΓεΓ ≥σΩ±≥εΓ√⌡ ±≥≡εΩ. ╧σ≡Γα  ±≥≡εΩα ≤Ωατ√Γασ≥ Φ∞  ∩α≡α∞σ≥≡α, Γ≥ε≡α  - ≥Φ∩ ∩σ≡σΣαΓασ∞√⌡ ≈σ≡στ φσπε Σαφφ√⌡, α ≥≡σ≥ⁿ  - τφα≈σφΦσ ∩α≡α∞σ≥≡α ∩ε ≤∞εδ≈αφΦ■.

    ╠σ≥εΣ paint

    ╧σ≡Γ√∞ Σσδε∞ ∞σ≥εΣ paint ε∩≡σΣσδ σ≥ ≡ατ∞σ≡√ εΩφα α∩δσ≥α, Γ√τ√Γα  Σδ  ²≥επε ∞σ≥εΣ getSize:

    Dimension dimAppWndDimension = getSize();

    ╠σ≥εΣ getSize ΓετΓ≡α∙ασ≥ ±±√δΩ≤ φα εß·σΩ≥ Ωδα±±α Dimension, ⌡≡αφ ∙ΦΘ Γ√±ε≥≤ Φ °Φ≡Φφ≤ εß·σΩ≥α:

    • height

    ┬√±ε≥α

    public int height;
    • width

    ╪Φ≡Φφα

    public int width;

    ┬ Ωδα±±σ Dimension ∩≡σΣ≤±∞ε≥≡σφε ≥≡Φ Ωεφ±≥≡≤Ω≥ε≡α Φ εΣΦφ ∞σ≥εΣ:

    public Dimension();
    public Dimension(Dimension  d);
    public Dimension(int width, int height);
    • toString

    ╧εδ≤≈σφΦσ ±≥≡εΩΦ, ∩≡σΣ±≥αΓδ ■∙σΘ Ωδα±±

    public String toString();

    ╧ε±δσ ε∩≡σΣσδσφΦ  ≡ατ∞σ≡εΓ εΩφα α∩δσ≥α ∞σ≥εΣ paint ±≥Φ≡ασ≥ ±εΣσ≡µΦ∞εσ Γ±σπε εΩφα:

    g.clearRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);

    ─αδσσ Γ Ωεφ≥σΩ±≥σ ε≥εß≡αµσφΦ  ≤±≥αφαΓδΦΓασ≥±  µσδ≥√Θ ÷Γσ≥:

    g.setColor(Color.yellow);

    ▌≥Φ∞ ÷Γσ≥ε∞ τα∩εδφ σ≥±  Γφ≤≥≡σφφ   εßδα±≥ⁿ εΩφα α∩δσ≥α, Σδ  ≈σπε ∩≡Φ∞σφ σ≥±  ∞σ≥εΣ fillRect:

    g.fillRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);

    ╟α≥σ∞ ∞σ≥εΣ paint ≤±≥αφαΓδΦΓασ≥ Γ Ωεφ≥σΩ±≥σ ε≥εß≡αµσφΦ  ≈σ≡φ√Θ ÷Γσ≥ Φ ≡Φ±≤σ≥ ≥εφΩ≤■ ≈σ≡φ≤■ ≡α∞Ω≤ ΓεΩ≡≤π εΩφα α∩δσ≥α:

    g.setColor(Color.black);
    g.drawRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);

    ═α ±δσΣ≤■∙σ∞ ²≥α∩σ ∞√ ∩εδ≤≈ασ∞ ∞σ≥≡ΦΩΦ ≥σΩ≤∙σπε °≡Φ⌠≥α, Γ√ß≡αφφεπε Γ Ωεφ≥σΩ±≥ ε≥εß≡αµσφΦ :

    fm = g.getFontMetrics();

    ╧εδⁿτ≤ ±ⁿ ²≥Φ∞Φ ∞σ≥≡ΦΩα∞Φ, ∞√ ε∩≡σΣσδ σ∞ Γ√±ε≥≤ ±Φ∞ΓεδεΓ ≥σΩ≤∙σπε °≡Φ⌠≥α Φ τα∩Φ±√Γασ∞ σσ Γ ∩εδσ yStep:

    yStep = fm.getHeight();

    ╧ε±δσ ²≥επε ∞σ≥εΣ paint τα∩≤±Ωασ≥ ÷ΦΩδ ∩ε Γ±σ∞ °≡Φ⌠≥α∞, ≤±≥αφεΓδσφφ√∞ Γ ±Φ±≥σ∞σ:

    for(int i = 0; i < szFontList.length; i++)
    {
      . . .
    }

    ╩εδΦ≈σ±≥Γε Σε±≥≤∩φ√⌡ °≡Φ⌠≥εΓ ≡αΓφε ≡ατ∞σ≡≤ ∞α±±ΦΓα szFontList, Ωε≥ε≡εσ Γ√≈Φ±δ σ≥±  ΩαΩ szFontList.length.

    ╠σ≥εΣ paint Γ√∩Φ±√Γασ≥ Γ εΩφσ α∩δσ≥α φατΓαφΦσ ΩαµΣεπε °≡Φ⌠≥α, ≤±≥αφαΓδΦΓα  Σδ  ²≥επε °≡Φ⌠≥ Helvetica ≡ατ∞σ≡ε∞ 12 ∩ΦΩ±σδεΓ:

    g.setFont(new Font("Helvetica", 
      Font.PLAIN, 12));
    g.drawString(szFontList[i],
      10, yStart + yStep * i);

    ╤∞σ∙σφΦσ ΩαµΣεΘ φεΓεΘ ±≥≡εΩΦ ± φατΓαφΦσ∞ °≡Φ⌠≥α Γ√≈Φ±δ σ≥±  Φ±⌡εΣ  Φτ Γ√±ε≥√ ±Φ∞ΓεδεΓ ≤±≥αφεΓδσφφεπε °≡Φ⌠≥α:

    fm = g.getFontMetrics();
    yStep = fm.getHeight();

    ╧ε±δσ φατΓαφΦ  °≡Φ⌠≥α ∞σ≥εΣ paint ≡Φ±≤σ≥ Γ εΩφσ α∩δσ≥α ≥σΩ±≥εΓ≤■ ±≥≡εΩ≤ parm_TestString, ∩εδ≤≈σφφ≤■ ≈σ≡στ ∩α≡α∞σ≥≡ ± Φ∞σφσ∞ "TestString":

    g.setFont(new Font(szFontList[i], 
      Font.PLAIN, 12));
    g.drawString(parm_TestString, 
      100, yStart + yStep * i);

    ╧σ≡σΣ ≥σ∞ ΩαΩ ∩σ≡σΘ≥Φ Ω ≡Φ±εΓαφΦ■ πσε∞σ≥≡Φ≈σ±ΩΦ⌡ ⌠Φπ≤≡, ∞σ≥εΣ paint τα∩ε∞Φφασ≥ Γ ∩εδσ yDraw Ωεε≡ΣΦφα≥≤ ∩ε±δσΣφσΘ ±≥≡εΩΦ φατΓαφΦ  °≡Φ⌠≥α, ±ΣσδαΓ ε≥±≥≤∩ Γ√±ε≥εΘ yStep :

    int yDraw;
    yDraw = yStart + 
      yStep * szFontList.length + yStep;

    ╧σ≡Γα  ⌠Φπ≤≡α, Ωε≥ε≡≤■ ≡Φ±≤σ≥ φα° α∩δσ≥, ²≥ε ∞φεπε≤πεδⁿφΦΩ.

    ╠√ ±ετΣασ∞ ∞φεπε≤πεδⁿφΦΩ ΩαΩ εß·σΩ≥ Ωδα±±α Polygon:

    Polygon p = new Polygon();

    ┬ ²≥ε≥ εß·σΩ≥ ∩≡Φ ∩ε∞ε∙Φ ∞σ≥εΣα addPoint ΣεßαΓδ σ≥±  φσ±ΩεδⁿΩε ≥ε≈σΩ:

    p.addPoint(70,  yDraw);
    p.addPoint(150, yDraw + 30);
    p.addPoint(160, yDraw + 80);
    p.addPoint(190, yDraw + 60);
    p.addPoint(140, yDraw + 30);
    p.addPoint(70,  yDraw + 39);

    ╧ε±δσ ΣεßαΓδσφΦ  Γ±σ⌡ ≥ε≈σΩ ∞σ≥εΣ paint ≡Φ±≤σ≥ ∞φεπε≤πεδⁿφΦΩ, Γ√τ√Γα  Σδ  ²≥επε ∞σ≥εΣ drawPolygon:

    g.drawPolygon(p);

    ╟α≥σ∞ ∞√ ≤±≥αφαΓδΦΓασ∞ Γ Ωεφ≥σΩ±≥σ ε≥εß≡αµσφΦ  Ω≡α±φ√Θ ÷Γσ≥ Φ ≡Φ±≤σ∞ ∩≡ ∞ε≤πεδⁿφΦΩ:

    g.setColor(Color.red);
    g.drawRect(10, yDraw + 85, 200, 100);

    ╟α≥σ∞ ∞σ≥εΣ paint Γ∩Φ±√Γασ≥ Γ ²≥ε≥ ∩≡ ∞ε≤πεδⁿφΦΩ ±σπ∞σφ≥ εΩ≡≤µφε±≥Φ:

    g.setColor(Color.black);
    g.drawArc(10, yDraw + 85, 
      200, 100, -50, 320);

    ─εΩ≤∞σφ≥ HTML Σδ  α∩δσ≥α Draw

    ─εΩ≤∞σφ≥ HTML Σδ  α∩δσ≥α Draw φσ Φ∞σσ≥ φΦΩαΩΦ⌡ ε±εßσφφε±≥σΘ. ╬φ ∩≡σΣ±≥αΓδσφ Γ δΦ±≥Φφπσ 2.

    ╦Φ±≥Φφπ 2. ╘αΘδ draw.tmp.html

    <applet
       name="draw"
       code="draw" 
       codebase="file:/e:/Sun/Articles/vol4/src/draw"
       width="250"
       height="350"
       align="Top"
       alt="If you had a java-enabled browser,
     you would see an applet here."
    >
    <param name="TestString" value="Test string">
       <hr>If your browser recognized the applet tag, 
       you would see an applet here.<hr>
    </applet>


Java | ╧≡εΣ≤Ω≥√ Φ ≡σ°σφΦ  | ╥σ⌡φεδεπΦΦ | ╤σ≡ΓΦ± Φ εß≤≈σφΦσ
╬ Ωε∞∩αφΦΦ | ╧α≡≥φσ≡√ | ═εΓε±≥Φ | ╧εΦ±Ω
Sun Microsystems Inc. Corporate Information Our partners News and Events Search on site Java Computing Products and Solutions Technologies and Researches Education and Service Content